package com.zhumo.sz.common.utils;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.lang.reflect.Array;
import java.lang.reflect.Field;
import java.util.*;

/**
 * 枚举工具类
 */
public class EnumUtil {

    /**
     * 获取实体中的 Enums 属性 列表 先满足需求,后续扩展，该方法目前不能获取不同类型的枚举
     * @param type bean类型
     * @return enumInfo 列表 无法获取类型
     */
    public static <T> List<EnumsInfo<Object>> getEnumInfo(Class<?> type) {
        ArrayList<EnumsInfo<Object>> enumInfoList = new ArrayList<>();
        Field[] fields = type.getDeclaredFields();
        for (Field field : fields) {
            field.setAccessible(true);
            Class<?> fieldType = field.getType();
            if (fieldType.isEnum() /* && fieldType.equals(enumClass) */){
                String fieldName = field.getName();
                String className = fieldType.getSimpleName();
                Object[] enumConstants = fieldType.getEnumConstants();
//                for (Object enumConstant : enumConstants) {
//                    enumConstant = field.getType().newInstance(); //cast exception 风险
//                }        String[] strArray = Arrays.copyOf(intArray, intArray.length, String[].class);
                EnumsInfo<Object> enumsInfo = new EnumsInfo<>(className, fieldName, enumConstants);
                enumInfoList.add(enumsInfo);
            }
        }
        return enumInfoList;
    }
    @Data
    @AllArgsConstructor
    @NoArgsConstructor
    public static class EnumsInfo<K>{

        private String className; //类名
        private String fieldName; //在Bean中的属性名
        private K[]  values; //枚举值
    }

    public static void getEnumValues(){}
}
